import axios, { type AxiosInstance, type AxiosResponse } from 'axios'
import type { ApiResponse } from '@/types'

// 动态确定API base URL
function getApiBaseURL(): string {
  const hostname = window.location.hostname

  // Docker部署环境：生产环境通过Nginx代理
  if (hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('ngrok')) {
    return '/api' // 生产环境通过Nginx代理访问后端
  }

  // 如果通过ngrok访问（用于测试）
  if (hostname.includes('ngrok')) {
    // 方案1: 通过局域网IP访问后端（如果手机和电脑在同一WiFi）
    return 'http://10.60.105.79:8001'

    // 方案2: 如果启动了后端ngrok，替换为实际URL
    // return 'https://YOUR-BACKEND-NGROK-URL.ngrok-free.app'
  }

  // 本地开发环境：通过Vite代理
  if (hostname === 'localhost' || hostname === '127.0.0.1') {
    return '/api' // 本地开发使用Vite代理
  }

  // 局域网访问（同一WiFi网络）
  if (hostname.startsWith('10.') || hostname.startsWith('192.168.') || hostname.startsWith('172.')) {
    return '/api' // 假设通过Nginx代理访问
  }

  // 默认情况
  return '/api'
}

// 创建axios实例
const api: AxiosInstance = axios.create({
  baseURL: getApiBaseURL(),
  timeout: 120000, // 增加到2分钟，以适应后端教室查询的长时间处理
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    // 可以在这里添加token等认证信息
    console.log('API请求:', config.method?.toUpperCase(), config.url)
    return config
  },
  (error) => {
    console.error('API请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  (response: AxiosResponse) => {
    console.log('API响应:', response.status, response.config.url)
    return response
  },
  (error) => {
    console.error('API响应错误:', error)

    // 处理常见错误
    if (error.response) {
      // 服务器响应了错误状态码
      const { status, data } = error.response
      console.error(`API错误 ${status}:`, data)

      switch (status) {
        case 401:
          console.error('未授权访问')
          break
        case 403:
          console.error('禁止访问')
          break
        case 404:
          console.error('资源未找到')
          break
        case 500:
          console.error('服务器内部错误')
          break
        default:
          console.error('未知错误')
      }
    } else if (error.request) {
      // 请求已发出但没有收到响应
      console.error('网络错误或服务器无响应')
    } else {
      // 请求配置错误
      console.error('请求配置错误:', error.message)
    }

    return Promise.reject(error)
  }
)

// API方法
export const apiMethods = {
  // 系统状态
  getSystemStatus: () => api.get<ApiResponse>('/status'),

  // 健康检查
  healthCheck: () => api.get<ApiResponse>('/health'),

  // 登录
  login: (credentials: { username: string; password: string }) =>
    api.post<ApiResponse>('/auth/login', credentials),

  // 查询教室
  queryClassroom: (request: { message: string; session_id?: string }) =>
    api.post<ApiResponse>('/chat/query', request),

  // 获取聊天历史
  getChatHistory: () => api.get<ApiResponse>('/chat/history')
}

export { api }
export default api